package file

import (
	"bufio"
	"io"
	"os"
)

// Iter 文件按行读取迭代器
type Iter struct {
	fileName   string
	line       []byte
	f          *os.File
	fileReader *bufio.Reader
	total      int
}

// NewFileIter 文件按行读取迭代器
func NewFileIter(filename string) (iter *Iter, err error) {
	iter = &Iter{fileName: filename}

	iter.f, err = os.Open(filename)
	if err != nil {
		return
	}

	iter.fileReader = bufio.NewReader(iter.f)
	return iter, nil
}

// Finish close open file
func (iter *Iter) Finish() {
	if iter.f != nil {
		_ = iter.f.Close()
	}
}

//GetTotal 获取总数量
func (iter *Iter) GetTotal() int {
	return iter.total
}

//HasNext 读取下一跳数据
func (iter *Iter) HasNext() bool {
	line, _, err := iter.fileReader.ReadLine()
	if err == io.EOF {
		return false
	}
	iter.line = line
	iter.total++
	return true
}

// NextLine 获取下一行记录
func (iter *Iter) NextLine() []byte {
	return iter.line
}

// FileName 文件名称
func (iter *Iter) FileName() string {
	return iter.fileName
}
